package com.firefly.mobile.app.util;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;

/**
 * MD5工具类
 * 
 * @author David.Huang
 */
public class Md5 {


	/** 默认编码方式(UTF-8) */
	public static final String DEFAULT_ENCODE = "utf-8";

	/** 默认算法(md5) */
	public static final String DEFAULT_ALGORITHM = "md5";

	/**
	 * 获得MD5加密后的字符串(默认UTF-8)
	 * 
	 * @param str 加密前的字符串
	 * @return 加密前后字符串
	 */
	public static String md5(String str) {
		return md5(str, DEFAULT_ENCODE);
	}

	/**
	 * 获得MD5加密后的字符串(指定编码方式)
	 * 
	 * @param params 加密前的字符串
	 * @return 加密前后字符串
	 * @throws UnsupportedEncodingException 
	 */
	public static String md5(String... params) {
		String s = "";
		for (int i = 0; i < params.length; i++) {
			if (params[i] == null) {
				params[i] = "";
			}
			s+=params[i];
		}
		System.out.println("参与运算的md5值"+s);
		return Md5.md5(s);
	}
	
	/**
	 * 获得MD5加密后的字符串(指定编码方式)
	 * 
	 * @param str 加密前的字符串
	 * @param encoding 编码方式
	 * @return 加密前后字符串
	 */
	public static String md5(String str, String encoding) {
		return encryptString(str, encoding, DEFAULT_ALGORITHM);
	}

	/**
	 * 根据指定编码和算法加密字符串
	 * 
	 * @param str 加密前的字符串
	 * @param encoding 编码
	 * @param algorithm 算法(md5)
	 * @return 加密前后字符串
	 */
	public static String encryptString(String str, String encoding, String algorithm) {
		byte[] unencodedStr = null;
		MessageDigest md = null;
		try {
			unencodedStr = str.getBytes(encoding);
			md = MessageDigest.getInstance(algorithm);
		} catch (Exception e) {
			return str;
		}
		md.reset();
		md.update(unencodedStr);
		byte[] encodedStr = md.digest();
		StringBuffer buf = new StringBuffer();
		for (int i = 0; i < encodedStr.length; i++) {
			if ((encodedStr[i] & 0xff) < 0x10) {
				buf.append("0");
			}
			buf.append(Long.toString(encodedStr[i] & 0xff, 16));
		}
		return buf.toString();
	}
}
